# -*- coding: utf-8 -*- 
# @project : 《Atcoder》
# @Author : created by bensonrachel on 2021/9/23
# @File : 8.D - Strange Lunchbox.py
# 限制状态有两层
import sys
read=sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines

def dp_01_triple_array():
    dp = [[[301] * (Y+1) for _ in range(X+1)] for _ in range(N+1)]
    for i in range(N+1):
        dp[i][0][0] = 0
        #初始化
    for i in range(1,N+1):#这层循环可以做优化的。
        #下面两个循环不能从1开始，因为要考虑到x=0时，y=1~Y的情况。这是限制状态有两层的题目的细节。
        for x in range(0,X+1):
            for y in range(0,Y+1):
                dp[i][x][y] = min(dp[i-1][x][y],dp[i-1][max(x-a[i],0)][max(y-b[i],0)]+1)
                # 对Lunchbox计数，所以数量是加一。

    if dp[-1][X][Y] == 301:
        return -1
    return dp[-1][X][Y]

"""
参考的题目有：01背包、超大01背包、打怪兽：求最小输出。可以大于怪物能量。
三维数组来做。暴力DP。
这种题先不要一上来就使用优化的做法，先用最基本的方法Ac。
f[i][j][k]表示前i个物品第一个约束条件取x个第二个约束条件取y个的最小方案。
"""
if __name__ == '__main__':
    N = int(input())
    X,Y = map(int,input().split())
    a, b = [0], [0]
    for _ in range(N):
        i, j = map(int, input().split())
        a.append(i)
        b.append(j)
    ans = dp_01_triple_array()
    print(ans)